
const fs = require('fs');
const path = require('path');
const { info, errorInfo, getHttp } = require('../utils.js');
const { workSpacePath, getExtensionPath } = require('../base.js')

/**
 * devServer的代理业务,用于访问workspace本地资源和http网络资源
 * @param {String} pathName 
 *     pathName应该是以/或\开头
 * @returns {Promise<Buffer>}
 *     返回都是按照二进制方式
 */
async function proxy(pathName) {
    const segs = pathName.split(/[\\/]/);
    const firstSeg = segs.shift() || segs.shift();
    switch (firstSeg) {
        case 'http':
            return await loadHttp(segs);
        case '$%7BworkspaceFolder%7D'://${workspaceFolder}url转义
            return await loadAssets(segs);
        /**
         * 剩下可以默认到用户工作空间的dist文件夹,或者可配
         * @todo 上面的http和assets可能要改成#http之类的了
         */   
    }
}

/**
 * 加载http资源
 * @param {String[]} segs 
 * @returns {Promise<Buffer>}
 */
async function loadHttp(segs) {
    let targetUrl = decodeURIComponent(segs[0]);
    //segs可能是两段 /escape路径/文件名 ,文件名可能不存在
    segs[1] && (targetUrl = targetUrl + '/' + segs[1]);
    return await getHttp(targetUrl);
}

/**
 * @param {String} p 
 * @returns {Promise<Buffer>}
 */
async function _load(p) {
    return new Promise((resolve, reject) => {
        /**
         * 第二个参数是null,就可以按照二进制方式读
         */
        fs.readFile(p, null, (err, buf) => {
            if (err) {
                reject(err);
            } else {
                resolve(buf);
            }
        })
    });
}

/**
 * 加载workspace内的静态资源
 * @param {String[]} segs 
 * @returns {Promise<Buffer>}
 */
async function loadAssets(segs) {
    const p = path.join(workSpacePath, segs.join('/'));
    return await _load(p);
}




module.exports = { proxy }